#include"process.h"

#define LENGTH 101
#define LABLE '#'

void FlushProcess(double target , double current )
{
    //旋转字符需要加载FlushProcess 中，因为即使下载失败，只要调用这个函数就一定会转
    const char* symb = "/|-\\";
    size_t len = strlen(symb);
    static int index = 0;

    //计算进度
    double rate = (current / target)*100.0;
    //根据进度来决定# 刷新的个数，整数个进度递增就刷新整数个#
    int cnt = (int)rate;
    //构建缓冲区
    char bar[LENGTH];
    memset(bar , 0 , sizeof(bar));
    //刷新cnt 个 #
    for(int i = 0;i<cnt;i++) bar[i] = LABLE;
    //刷新
    printf("[%-100s][%.1lf%%][%c]\r",bar,rate,symb[index++]);//让光标回到开头
    index%=len;
    //刷新
    fflush(stdout);

    //当最后一次，避免程序结束命令行的覆盖，需要增加一个 \n
    if(rate >= 100.0) printf("\n");
}

//这只是工作流程，不能在实际当中运用，需要结合下载的情况
void Process()
{
    const char* symb = "/|-\\";//转义字符只占1byte
    size_t len = strlen(symb);
   
    //先解决刷新的字符，就是重复刷新覆盖
    char bar[LENGTH];
    memset(bar , '\0' , sizeof(bar));
    int cnt = 0;
    while(cnt <= 100)
    {
        printf("[%-100s][%d%%][%c]\r" , bar,cnt,symb[cnt%len]);
        fflush(stdout);
        bar[cnt++] = LABLE;
        usleep(100000);
    }

    printf("\n");
}
